package com.liyujie.serialport.utils;

import android.app.Application;
import android.speech.tts.TextToSpeech;

import com.blankj.utilcode.util.LogUtils;

import java.util.Locale;

public class TextToSpeechUtils {

    /**
     * TTS对象
     * @param mContext
     * @return
     */
    private static TextToSpeech mTTS对象;
    public static void setTTS对象(Application mApplication) {
        if(null == mTTS对象){
            // 参数Context,TextToSpeech.OnInitListener
            mTTS对象 = new TextToSpeech(mApplication, new TextToSpeech.OnInitListener() {
                @Override
                public void onInit(int status) {
                    if (status == TextToSpeech.SUCCESS) {
                     /*
                    使用的是小米手机进行测试，打开设置，在系统和设备列表项中找到更多设置，
                    点击进入更多设置，在点击进入语言和输入法，见语言项列表，点击文字转语音（TTS）输出，
                    首选引擎项有三项为Pico TTs，科大讯飞语音引擎3.0，度秘语音引擎3.0。其中Pico TTS不支持
                    中文语言状态。其他两项支持中文。选择科大讯飞语音引擎3.0。进行测试。

                        如果自己的测试机里面没有可以读取中文的引擎，
                    那么不要紧，我在该Module包中放了一个科大讯飞语音引擎3.0.apk，将该引擎进行安装后，进入到
                    系统设置中，找到文字转语音（TTS）输出，将引擎修改为科大讯飞语音引擎3.0即可。重新启动测试
                    Demo即可体验到文字转中文语言。
                     */
                        int result = mTTS对象.setLanguage(Locale.CHINA);
                        // TextToSpeech.LANG_MISSING_DATA：表示语言的数据丢失
                        // TextToSpeech.LANG_NOT_SUPPORTED：不支持
                        if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
                            LogUtils.d("数据丢失或不支持");
                        }
                    }
                }
            });
            // 设置音调，值越大声音越尖（女生），值越小则变成男声,1.0是常规
            mTTS对象.setPitch(1.0f);
            // 设置语速
            mTTS对象.setSpeechRate(1.0f);
        }
    }
    public static void 播放文字转语言的方法(String 转换内容){
        // TODO validate success, do something
        if (mTTS对象 != null) {
            /*
            TextToSpeech的speak方法有两个重载。
            // 执行朗读的方法
            speak(CharSequence text,int queueMode,Bundle params,String utteranceId);
            // 将朗读的的声音记录成音频文件
            synthesizeToFile(CharSequence text,Bundle params,File file,String utteranceId);
            第二个参数queueMode用于指定发音队列模式，两种模式选择
            （1）TextToSpeech.QUEUE_FLUSH：该模式下在有新任务时候会清除当前语音任务，执行新的语音任务
            （2）TextToSpeech.QUEUE_ADD：该模式下会把新的语音任务放到语音任务之后，
            等前面的语音任务执行完了才会执行新的语音任务
            */
            mTTS对象.speak(转换内容, TextToSpeech.QUEUE_FLUSH, null);
        }
    }
}
